/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package CiaAerea;

import java.io.Serializable;
import java.util.InputMismatchException;
import javax.swing.JOptionPane;

/**
 *
 * @author mbm
 */
public class Pessoa implements Serializable{

    protected String cpf;
    protected String nome;
    protected String eMail;
    protected String telefone;
    protected String celular;
    protected Endereco endereco;

    public Pessoa() throws Exception {
        endereco = null;

        setNome("");
        setCpf("");
        seteMail("");
        setTelefone("");
        setCelular("");
    }

    public Pessoa(String nome, String cpf, String eMail, String telefone, String celular, Endereco end) throws Exception {
        endereco = end;

        setNome(nome);
        setCpf(cpf);
        seteMail(eMail);
        setTelefone(telefone);
        setCelular(celular);

    }

    public String getNome() {
        return nome;
    }

    public void setNome(String nome) throws Exception {

        if (nome.isEmpty()) {
            throw new Exception("Campo Nome Vazio !");

        } else {
            for (int i = 0; i < nome.length(); i++) {
                if (!Character.isLetter(nome.charAt(i)) && !Character.isSpaceChar(nome.charAt(i))) {
                    throw new Exception("Caractere Invalido no campo Nome");
                } else {
                    this.nome = nome;
                }
            }
        }

    }

    public String getCpf() {
        return cpf;
    }

    public void setCpf(String cpf) throws Exception {
        if (cpf.isEmpty()) {
            throw new Exception("Campo CPF em branco!");
        } else {
            if (isCPF(cpf)) {
                this.cpf = cpf;
            } else {
                throw new Exception("CPF Inválido!");
            }
        }

    }

    public String geteMail() {
        return eMail;
    }

    public void seteMail(String eMail) throws Exception {

        if (eMail.isEmpty()) {
            throw new Exception("Campo Email Vazio !");
        } else {
            this.eMail = eMail;
        }

    }

    public String getTelefone() {
        return telefone;
    }

    public void setTelefone(String telefone) throws Exception {

        if (telefone.isEmpty()) {
            throw new Exception("Campo Telefone Vazio !");

        } else {
            for (int i = 0; i < telefone.length(); i++) {
                if (!Character.isDigit(telefone.charAt(i))) {
                    throw new Exception("Caractere Invalido no campo Telefone");
                } else {
                    this.telefone = telefone;
                }
            }
        }

    }

    public String getCelular() {
        return celular;
    }

    public void setCelular(String celular) throws Exception {

        if (celular.isEmpty()) {
            throw new Exception("Campo Celular Vazio !");

        } else {
            for (int i = 0; i < celular.length(); i++) {
                if (!Character.isDigit(celular.charAt(i))) {
                    throw new Exception("Caractere Invalido no campo Celular");
                } else {
                    this.celular = celular;
                }
            }
        }

    }

    public static boolean isCPF(String CPF) {
// considera-se erro CPF's formados por uma sequencia de numeros iguais
        if (CPF.equals("00000000000") || CPF.equals("11111111111")
                || CPF.equals("22222222222") || CPF.equals("33333333333")
                || CPF.equals("44444444444") || CPF.equals("55555555555")
                || CPF.equals("66666666666") || CPF.equals("77777777777")
                || CPF.equals("88888888888") || CPF.equals("99999999999")
                || (CPF.length() != 11)) {
            return (false);
        }

        char dig10, dig11;
        int sm, i, r, num, peso;

// "try" - protege o codigo para eventuais erros de conversao de tipo (int)
        try {
// Calculo do 1o. Digito Verificador
            sm = 0;
            peso = 10;
            for (i = 0; i < 9; i++) {
// converte o i-esimo caractere do CPF em um numero:
// por exemplo, transforma o caractere '0' no inteiro 0         
// (48 eh a posicao de '0' na tabela ASCII)         
                num = (int) (CPF.charAt(i) - 48);
                sm = sm + (num * peso);
                peso = peso - 1;
            }

            r = 11 - (sm % 11);
            if ((r == 10) || (r == 11)) {
                dig10 = '0';
            } else {
                dig10 = (char) (r + 48); // converte no respectivo caractere numerico
            }
// Calculo do 2o. Digito Verificador
            sm = 0;
            peso = 11;
            for (i = 0; i < 10; i++) {
                num = (int) (CPF.charAt(i) - 48);
                sm = sm + (num * peso);
                peso = peso - 1;
            }

            r = 11 - (sm % 11);
            if ((r == 10) || (r == 11)) {
                dig11 = '0';
            } else {
                dig11 = (char) (r + 48);
            }

// Verifica se os digitos calculados conferem com os digitos informados.
            if ((dig10 == CPF.charAt(9)) && (dig11 == CPF.charAt(10))) {
                return (true);
            } else {
                return (false);
            }
        } catch (InputMismatchException erro) {
            return (false);

        }
    }
}
